﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace produccion.clases
{
    class CLSMAEOPCP
    {
 //Administracion menu principal
 #region Metodos basicos tabla

         

        public DataTable consultar()
        {
            try{
                MDOgeneral mod = new MDOgeneral();
                string query = "select MAEOPCP.CODPADRE_OPC,MAEOPCP.ORDEN_OPC,MAEOPCP.CODHIJO_OPC,FORMUL_OPC,NOMBRE_OPC ,MAEOPCP.TIPO_OPC,X.CODUSU_OPU from MAEOPCP left outer join (select CODUSU_OPU,CODHIJO_OPU from OPCUSUP where OPCUSUP.CODUSU_OPU='" + CODUSU + "') X  on (X.CODHIJO_OPU=MAEOPCP.CODHIJO_OPC)  order by MAEOPCP.TIPO_OPC DESC,MAEOPCP.ORDEN_OPC ASC";
            return mod.consulta(query);
            }catch (Exception e) { throw e; }
        }


        public List<CLSMAEOPCP> ConsultarMenu(){

            MDOgeneral mod = new MDOgeneral();
           List<CLSMAEOPCP> arbol = new List<CLSMAEOPCP>();
            
            try {

                string query = "select CODPADRE_OPC,CODHIJO_OPC,ORDEN_OPC,NOMBRE_OPC,TIPO_OPC,FORMUL_OPC from maeopcp ORDER BY TIPO_OPC DESC,ORDEN_OPC ASC";
                val=mod.consulta(query);
                arbol= CargarMenu(0,null); 
       
            }
            catch (Exception ex) { throw ex; }
            return arbol;
        }

        private DataTable val;
        public List<CLSMAEOPCP> CargarMenu(int indicepadre, CLSMAEOPCP nodopadre)
        {

            DataView vista = new DataView(val);
            vista.RowFilter = val.Columns["CODPADRE_OPC"].ColumnName + " = " + indicepadre;
            foreach (DataRowView r in vista)
            {
                CLSMAEOPCP nodo = new CLSMAEOPCP
                {
                    CODPADRE_OPC = r["CODPADRE_OPC"].ToString(),
                    TIPO_OPC = r["TIPO_OPC"].ToString(),
                    CODHIJO_OPC = r["CODHIJO_OPC"].ToString(),
                    ORDEN_OPC = r["ORDEN_OPC"].ToString(),
                    FORMUL_OPC = r["FORMUL_OPC"].ToString(),
                    NOMBRE_OPC = r["NOMBRE_OPC"].ToString().Trim(),
                };
                if (nodopadre == null)
                {
                    nodo.padre = padre;
                    if (hijos == null) { hijos = new List<CLSMAEOPCP>(); }
                    hijos.Add(nodo);
                    if (padre == null) { padre = new CLSMAEOPCP(); }
                    padre.hijos = hijos;
                
                }
                else
                {
                    nodo.padre = nodopadre;
                    if (nodopadre.hijos == null) { nodopadre.hijos = new List<CLSMAEOPCP>(); }
                    nodopadre.hijos.Add(nodo);
                }
                CargarMenu(Convert.ToInt32(r["CODHIJO_OPC"]), nodo);
            }

            return hijos;
        }

#endregion

#region  Propiedades tabla
        private string _CODPADRE_OPC;
        public string CODPADRE_OPC
        {
            get { return _CODPADRE_OPC; }
            set { _CODPADRE_OPC=value; }
        }
        private string _CODHIJO_OPC;
        public string CODHIJO_OPC
        {
            get { return _CODHIJO_OPC; }
            set { _CODHIJO_OPC = value; }
        }
        private string _ORDEN_OPC;
        public string ORDEN_OPC
        {
            get { return _ORDEN_OPC; }
            set { _ORDEN_OPC = value; }
        }
        private string _NOMBRE_OPC;
        public string NOMBRE_OPC
        {
            get { return _NOMBRE_OPC; }
            set { _NOMBRE_OPC = value; }
        }
        private string _TIPO_OPC;
        public string TIPO_OPC
        {
            get { return _TIPO_OPC; }
            set { _TIPO_OPC = value; }
        }
        private string _FORMUL_OPC;
        public string FORMUL_OPC
        {
            get { return _FORMUL_OPC; }
            set { _FORMUL_OPC=value; }
        }
        private string _CODTRN_OPC;
        public string CODTRN_OPC
        {
            get { return _CODTRN_OPC; }
            set { _CODTRN_OPC=value; }
        }
        private string _CODUSU;
        public string CODUSU
        {
            get { return _CODUSU; }
            set { _CODUSU = value; }
        }

        public  List<CLSMAEOPCP> hijos;
        
        public  CLSMAEOPCP padre;
        


#endregion

 

    }
}
